package com.zmz.MathTest;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * Create with IntelliT IDEA
 *
 * @Author: zhengmingzhe
 * @Date: 2022/11/22/14:21
 * @Description: Java中的BigDecimal运算测试
 */
public class BigDecimalTest {
    public static void main(String[] args) {
        //四则运算测试
        fourOperations();
        //返回符号  1:正 ,0：0,-1:负
        getSymbol();
        //比较测试
        compareToTest();
        //为空校验判断
        checkNull();
    }

    public static void fourOperations() {
        BigDecimal a = new BigDecimal("123.231423423423");
        BigDecimal b = new BigDecimal("456");
        BigDecimal m = new BigDecimal("9");
        BigDecimal n = new BigDecimal("4");
        //加   结果：579.231423423423
        BigDecimal c = a.add(b);
        System.out.println(c);
        //减   结果：-332.768576576577
        BigDecimal d = a.subtract(b);
        System.out.println(d);
        //乘   结果:56193.529081080888
        BigDecimal e = a.multiply(b);
        System.out.println(e);
        //除 结果：2.250000
        //参数2:指定精度,保留6位小数 ; 参数3: 选择舍入模式,此处为 四舍五入
        BigDecimal f = m.divide(n, 6, BigDecimal.ROUND_HALF_UP);
        System.out.println(f);
        //舍弃小数位 结果：2
        // jdk 1.9中第三个参数 被RoundingMode取代
        BigDecimal g = m.divide(n, RoundingMode.DOWN);
        System.out.println(g);
        //除  结果 2.25
        // 2位小数;舍入模式为大于0.5进1，否则舍弃。
        BigDecimal h = m.divide(n, 2, RoundingMode.HALF_DOWN);
        System.out.println(h);
    }

    public static void getSymbol() {
        //返回 1 表示值 为正值 ;  0 表示 为 0 ;  -1 表示 负数 。
        BigDecimal a = new BigDecimal("123");
        int b = a.signum(); // 结果是 1
        System.out.println(b);
    }

    public static void compareToTest() {
        // 结果 : 1 表示 大于; 0 表示 等于; -1 表示 小于 。
        BigDecimal a = new BigDecimal(0.5);
        BigDecimal b = new BigDecimal(0.2);
        int c = a.compareTo(b); // 结果 C = 1
        System.out.println(c);
    }

    public static void checkNull() {
        BigDecimal a = new BigDecimal("5445.67");
        a = null;
        if (a == null) {
            System.out.println("类型为空");
//            a = new BigDecimal("0.00");
        }
        a.doubleValue();

        System.out.println(a);
    }
}
